package com.szjlc.mybatis.sqlinterceptor.entity;

import java.io.Serializable;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

/**
 * Mysql执行计划结果
 * @author steve
 * @since 2022-11-29 0:14
 */
@Data
public class ExplainResultDTO implements Serializable {

    // public static final

    /** id相同顺序执行，id越大先执行 */
    private Integer id;

    /** 数据查询的类型，主要是用于区别，普通查询、联合查询、子查询等的复杂查询 */
    private String selectType;

    /** 操作表的名称 */
    private String table;

    /** 分区表中的命中情况 */
    private String partitions;

    /** 访问类型排列，`system`>`const`>`eq_ref`>`ref`>`range`>`index`>`ALL` */
    private String type;

    /** 可能使用到的索引 */
    private String possibleKeys;

    /** 使用到的索引 */
    private String key;

    /** 使用到的索引使用的字节数 */
    private String keyLen;

    /** 显示索引的哪一列被使用 */
    private String ref;

    /** 估算匹配的行数 */
    private Integer rows;

    /** 已加载数据/全部数据 的百分比。只是不显示百分号，如全表扫描显示100 */
    private Integer filtered;

    /**
     * 额外信息：
     * Using filesort
     * Using temporary
     * Using index
     * Using where
     * Using join buffer
     * impossible where
     */
    private String Extra;


    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
    }
}
